# 导入数据库管理器和用户服务
from utils.db_manager import db_manager
from services.user_service import UserService

def init_db():
    """初始化数据库，创建所有定义的表。"""
    print("正在创建数据库表...")
    db_manager.create_tables()
    print("数据库表创建完成。")

def main():
    """应用程序主函数，演示如何使用服务层。"""
    # 1. 初始化数据库
    init_db()
    
    # 2. 创建服务实例
    user_service = UserService()
    
    # 3. 示例：创建用户
    # 注意：我们直接调用服务层的方法，不需要关心session和事务，因为装饰器已经处理了
    print("\n--- 正在创建新用户 ---")
    new_user = user_service.create_user({
        'username': 'test_user',
        'email': 'test@example.com',
        'password': 'hashed_password_here' # 在实际项目中，这里应该是哈希后的密码
    })
    print(f"成功创建用户: {new_user}")
    
    # 4. 示例：根据ID查询用户
    print("\n--- 正在根据ID查询用户 ---")
    found_user = user_service.get_user_by_id(new_user.id)
    print(f"查询到用户: {found_user}")

    # 5. 示例：使用原生SQL查询
    print("\n--- 正在使用原生SQL查询 ---")
    # 注意：原生SQL查询目前没有经过Service层，直接调用了Repository
    # 在实际项目中，也应该将其封装在Service层中
    raw_sql_users = user_service.user_repository.find_users_by_raw_sql('test')
    print(f"原生SQL查询结果: {raw_sql_users}")
    
    # 6. 清理资源（在长时间运行的应用中，通常在应用关闭时调用）
    db_manager.dispose_engine()
    print("\n数据库连接池已释放。")

# Python的入口点检查
# 当这个文件作为主程序运行时，__name__的值是'__main__'
if __name__ == "__main__":
    main()